﻿using ProyectoDeTesis.Controladores;
using ProyectoDeTesis.Properties;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Resources;
using System.Windows.Forms;

namespace ProyectoDeTesis.Vistas
{
    public partial class PuertaEmbarque : Form
    {
        private int pantalla_id = 19;
        private int num_puerta = 0;
        private ResultadoAlgoritmoController resultadoAlgoritmoController = new ResultadoAlgoritmoController();
        private PuertaEmbarqueController puertaEmbarqueController = new PuertaEmbarqueController();
        private List<ResultadoAlgoritmo> puertas_embarque_asignadas = new List<ResultadoAlgoritmo>();
        private List<ResultadoAlgoritmo> puertas_embarque_asignadas_filtro = new List<ResultadoAlgoritmo>();
        
        public PuertaEmbarque()
        {
            InitializeComponent();
            cargarPuertasEmbarque();
            dtpFecha.Value = DateTime.Now.Date;
        }

        private void estilo_Datagriew(DataGridView dataGridView)
        {
            dataGridView.Columns[0].HeaderText = "Número de Simulación";
            dataGridView.Columns[1].HeaderText = "Número de vuelo";
            dataGridView.Columns[2].HeaderText = "Inicio de abordaje";
            dataGridView.Columns[3].HeaderText = "Fin de abordaje";
            dataGridView.Columns[4].HeaderText = "Puerta de Embarque";
            dataGridView.Columns[0].Width = 80;
            dataGridView.Columns[1].Width = 80;
            dataGridView.Columns[2].Width = 200;
            dataGridView.Columns[3].Width = 200;
            dataGridView.Columns[4].Width = 90;
        }

        private void BtnPersonal_Click(object sender, EventArgs e)
        {
            Personal personal = new Personal();
            personal.ShowDialog(this);
        }

        private void BtnPerfil_Click(object sender, EventArgs e)
        {
            ProyectoDeTesis.Vistas.Perfil perfil = new ProyectoDeTesis.Vistas.Perfil();
            perfil.ShowDialog(this);
        }

        private void filtrarPuerta(string nombre)
        {
            int index = nombre.IndexOf("ptbPuerta");
            num_puerta = Convert.ToInt32(nombre.Remove(index, "ptbPuerta".Length));

            var query = puertas_embarque_asignadas.Where(c => c.num_puerta == num_puerta);
            puertas_embarque_asignadas_filtro = query.ToList();

            if (puertas_embarque_asignadas_filtro.Count > 0)
            {
                BindingSource bindingSource1 = new BindingSource();

                bindingSource1.DataSource = (from pp in puertas_embarque_asignadas_filtro
                                             select new { pp.simulacion_id, pp.num_vuelo, pp.inicio_abordaje, pp.fin_abordaje, pp.puerta_id });

                dgvBusqueda.DataSource = bindingSource1;
                estilo_Datagriew(dgvBusqueda);
            }
            else
            {
                MessageBox.Show("La puerta N° " + num_puerta + " no tienen ningún vuelo asignado.");
            }

        }

        private void BtnTodo_Click(object sender, EventArgs e)
        {
            BindingSource bindingSource1 = new BindingSource();

            bindingSource1.DataSource = (from pp in puertas_embarque_asignadas
                                         select new {pp.simulacion_id,pp.num_vuelo,pp.inicio_abordaje,pp.fin_abordaje,pp.puerta_id});

            dgvBusqueda.DataSource = bindingSource1;
            estilo_Datagriew(dgvBusqueda);
        }

        

        private void btnConfig_Click(object sender, EventArgs e)
        {
            ProyectoDeTesis.Vistas.Configuracion config = new ProyectoDeTesis.Vistas.Configuracion();
            config.ShowDialog(this);
        }

        private void btnConfiguracion_Click(object sender, EventArgs e)
        {
            ProyectoDeTesis.Vistas.Configuracion config = new ProyectoDeTesis.Vistas.Configuracion();
            config.ShowDialog(this);
        }

        private void btnadministrarPuertaDeEmbarque_Click(object sender, EventArgs e)
        {
            PuertaEmbarque puerta = new PuertaEmbarque();
            puerta.ShowDialog(this);
        }

        private void BtnEditarPuertaEmbarque_Click(object sender, EventArgs e)
        {
            if (this.num_puerta > 0)
            {
                EditarPuertaEmbarque editar = new EditarPuertaEmbarque(this.num_puerta);
                editar.ShowDialog(this);
                if (editar.resultadoVentana)
                {
                    cargarPuertasEmbarque();
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar una puerta de embarque primero.");
            }  
            
        }

        private void cargarPuertasEmbarque()
        {
            List<ProyectoDeTesis.PuertaEmbarque> listaPuertaEmbarque = puertaEmbarqueController.obtenerPuertasEmbarque();

            foreach (ProyectoDeTesis.PuertaEmbarque pe in listaPuertaEmbarque)
            {
                
                var match = this.Controls.Find("ptbPuerta" + pe.id, false).First();

                string filename = "black" + pe.id.ToString("00");
                if (pe.estado == "Inactivo")
                {
                    filename += "x";
                }
                ResourceManager rm = Resources.ResourceManager;
                ((PictureBox)match).Image = (Image)rm.GetObject(filename);
            }
        }

        private void btnconsultarDistanciaAPistaPrincipal_Click(object sender, EventArgs e)
        {

        }

        private void btnDistanciaPistaPrincipal_Click(object sender, EventArgs e)
        {
            ConsultarDistanciaPistaPrincipal consulta = new ConsultarDistanciaPistaPrincipal();
            consulta.ShowDialog(this);
        }

        private void BtnSearch_Click(object sender, EventArgs e)
        {
            puertas_embarque_asignadas = resultadoAlgoritmoController.obtenerResultadosAlgoritmo(dtpFecha.Value);
            BindingSource bindingSource1 = new BindingSource();

            bindingSource1.DataSource = (from pp in puertas_embarque_asignadas
                                         select new { pp.simulacion_id, pp.num_vuelo, pp.inicio_abordaje, pp.fin_abordaje, pp.puerta_id});

            dgvBusqueda.DataSource = bindingSource1;
            estilo_Datagriew(dgvBusqueda);
        }

        private void BtnLimpiar_Click(object sender, EventArgs e)
        {
            dtpFecha.Value = DateTime.Now.Date;
        }

        private void BtnCancelar_Click(object sender, EventArgs e)
        {

        }

        private void btnSimulacion_Click(object sender, EventArgs e)
        {
            Simulacion simu = new Simulacion();
            simu.ShowDialog(this);
        }

        private void btnconfiguracionAlgoritmo_Click(object sender, EventArgs e)
        {
            ProyectoDeTesis.Vistas.Configuracion config = new ProyectoDeTesis.Vistas.Configuracion();
            config.ShowDialog(this);
        }

        private void BtnhistoriaDeSimulaciones_Click(object sender, EventArgs e)
        {
            HistorialSimulacion historial = new HistorialSimulacion();
            historial.ShowDialog(this);
        }

        private void BtniniciarSimulación_Click(object sender, EventArgs e)
        {
            Simulacion simulacion = new Simulacion();
            simulacion.ShowDialog(this);
        }

        private void btnHabilitar_Click(object sender, EventArgs e)
        {
            if (num_puerta > 0)
            {
                if (puertaEmbarqueController.habilitarPuertaEmbarque(num_puerta))
                {
                    MessageBox.Show("Se habilito la puerta de embarque número " + num_puerta);
                    cargarPuertasEmbarque();
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar una puerta de embarque.");
            }
        }

        private void btnDeshabilitar_Click(object sender, EventArgs e)
        {
            if (num_puerta > 0)
            {
                if (puertaEmbarqueController.deshabilitarPuertaEmbarque(num_puerta))
                {
                    MessageBox.Show("Se deshabilito la puerta de embarque número " + num_puerta);
                    cargarPuertasEmbarque();
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar una puerta de embarque.");
            }
        }

        private void ptbPuerta1_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta1.Name);
        }

        private void ptbPuerta2_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta2.Name);
        }

        private void ptbPuerta3_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta3.Name);
        }

        private void ptbPuerta4_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta4.Name);
        }

        private void ptbPuerta5_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta5.Name);
        }

        private void ptbPuerta6_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta6.Name);
        }

        private void ptbPuerta7_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta7.Name);
        }

        private void ptbPuerta8_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta8.Name);
        }

        private void ptbPuerta9_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta9.Name);
        }

        private void ptbPuerta10_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta10.Name);
        }

        private void ptbPuerta11_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta11.Name);
        }

        private void ptbPuerta12_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta12.Name);
        }

        private void ptbPuerta13_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta13.Name);
        }

        private void ptbPuerta14_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta14.Name);
        }

        private void ptbPuerta15_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta15.Name);
        }

        private void ptbPuerta16_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta16.Name);
        }

        private void ptbPuerta17_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta17.Name);
        }

        private void ptbPuerta18_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta18.Name);
        }

        private void ptbPuerta19_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta19.Name);
        }

        private void ptbPuerta20_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta20.Name);
        }

        private void ptbPuerta21_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta21.Name);
        }

        private void ptbPuerta22_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta22.Name);
        }

        private void ptbPuerta23_Click(object sender, EventArgs e)
        {
            filtrarPuerta(ptbPuerta23.Name);
        }

        private void lecturaDeVuelosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Lectura lectura = new Lectura();
            lectura.ShowDialog(this);
        }

        private void administrarVuelosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Vuelo vuelo = new Vuelo();
            vuelo.ShowDialog(this);
        }

        private void programaciónDeVuelosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
            Plan plan = new Plan();
            plan.ShowDialog(this);
        }

        private void pendientesDeAprobaciónToolStripMenuItem_Click(object sender, EventArgs e)
        {
            PendienteAprobacion pendiente = new PendienteAprobacion();
            pendiente.ShowDialog(this);
        }

        private void estadoDeVuelosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            EstadoVuelos estado = new EstadoVuelos();
            estado.ShowDialog(this);
        }


    }
}
